'use strict';

const Service = require('egg').Service;
const Redlock = require('redlock');


class RedLockService extends Service {

  /**
   * 导出自己
   */
  async redLockSelf() {
    const { app } = this;
    const client = app.redis;
    const redlock = new Redlock(
      [ client ],
      {
        driftFactor: 0.01, // 时间以毫秒为单位
        retryCount: 1, // Redlock尝试的最大次数,在出错之前锁定资源
        retryDelay: 100, // 两次尝试之间的时间（以毫秒为单位）时间以毫秒为单位
        retryJitter: 200, // 随机添加到重试中的最长时间（以毫秒为单位）在竞争激烈的情况下提高性能
      }
    );
    return redlock;
  }
}

module.exports = RedLockService;
